package com.csun.cmny.provider.service;

import com.csun.cmny.base.dto.LoginAuthDto;
import com.csun.cmny.core.support.IService;
import com.csun.cmny.provider.model.domain.UacGroup;
import com.csun.cmny.provider.model.dto.group.*;
import com.csun.cmny.provider.model.dto.properManagement.GroupByGroupNameDto;
import com.csun.cmny.provider.model.dto.properManagement.LoginNameByGroupIdDto;
import com.csun.cmny.provider.model.dto.user.IdStatusDto;
import com.csun.cmny.provider.model.vo.*;
import com.csun.cmny.util.wrapper.Wrapper;
import com.github.pagehelper.PageInfo;

import java.util.List;

public interface UacGroupService extends IService<UacGroup> {

	/**
	 * Update uac group status by id int.
	 *
	 * @param idStatusDto  the id status dto
	 * @param loginAuthDto the login auth dto
	 *
	 * @return the int
	 */
	int updateUacGroupStatusById(IdStatusDto idStatusDto, LoginAuthDto loginAuthDto);

	/**
	 * Delete uac group by id int.
	 *
	 * @param id the id
	 *
	 * @return the int
	 */
	int deleteUacGroupById(Long id);

	/**
	 * Query by id uac group.
	 *
	 * @param groupId the group id
	 *
	 * @return the uac group
	 */
	UacGroup queryById(Long groupId);

	/**
	 * Gets group tree.
	 *
	 * @param id the id
	 *
	 * @return the group tree
	 */
	List<GroupZtreeVo> getGroupTree(Long id);

	/**
	 * Find current user have group info list.
	 *
	 * @param userId the user id
	 *
	 * @return the list
	 */
	List<MenuVo> getGroupTreeListByUserId(Long userId);

	/**
	 * Gets group bind user dto.
	 *
	 * @param groupId the group id
	 * @param userId  the user id
	 *
	 * @return the group bind user dto
	 */
	GroupBindUserDto getGroupBindUserDto(Long groupId, Long userId);

	/**
	 * Bind uac user 4 group int.
	 *
	 * @param groupBindUserReqDto the group bind user req dto
	 * @param loginAuthDto        the login auth dto
	 */
	void bindUacUser4Group(GroupBindUserReqDto groupBindUserReqDto, LoginAuthDto loginAuthDto);

	/**
	 * Save uac group int.
	 *
	 * @param group        the group
	 * @param loginAuthDto the login auth dto
	 *
	 * @return the int
	 */
	int saveUacGroup(UacGroup group, LoginAuthDto loginAuthDto);

	/**
	 * Gets by id.
	 *
	 * @param id the id
	 *
	 * @return the by id
	 */
	UacGroup getById(Long id);

	/**
	 * 添加机构
	 *
	 * @param group
	 * @param loginAuthDto
	 *
	 * @return
	 */
	Integer addUacGroup(UacGroup group, LoginAuthDto loginAuthDto);

	/**
	 * 修改机构
	 *
	 * @param group
	 * @param loginAuthDto
	 *
	 * @return
	 */
	Integer updateUacGroup(UacGroup group, LoginAuthDto loginAuthDto);

	/**
	 * 校验机构名称是否重复
	 *
	 * @param checkGroupNameDto	the check group name dto
	 *
	 * @return	the stat, true - not exist, false - exist
	 */
	boolean checkGroupName(CheckGroupNameDto checkGroupNameDto);

	/**
	 * 校验机构编码是否重复
	 *
	 * @param checkGroupCodeDto	the check group code dto
	 *
	 * @return	the stat, true - not exist, false - exist
	 */
	boolean checkGroupCode(CheckGroupCodeDto checkGroupCodeDto);

	/**
	 * 查询机构列表
	 *
	 * @param groupQueryDto	the group query dto
	 *
	 * @return	the page info.
	 */
	PageInfo queryUacGroupListWithPage(GroupQueryDto groupQueryDto);

	/**
	 * 初始化机构组织架构
	 *
	 * @param initDeptEmpDto	the init dept emp dto
	 * @param loginAuthDto		the login auth dto
	 *
	 * @return	the int.
	 */
    Integer initDeptEmp(InitDeptEmpDto initDeptEmpDto, LoginAuthDto loginAuthDto);

	/**
	 * 初始化机构角色
	 *
	 * @param initRoleDto	the init role dto
	 *
	 * @return	the int.
	 */
	Integer initRole(InitRoleDto initRoleDto);

	/**
	 * 查询机构角色列表
	 *
	 * @param groupRoleQueryDto	the group role query dto
	 *
	 * @return	the list.
	 */
	List<RoleVo> queryRoleList(GroupRoleQueryDto groupRoleQueryDto);

	/**
	 * 分配机构角色
	 *
	 * @param initRoleDto	the init role dto
	 *
	 * @return	the int.
	 */
	Integer bindRole(InitRoleDto initRoleDto);

    ProperManagementLoginName selectLoginNameByGroupId(LoginNameByGroupIdDto loginNameByGroupIdDto);

    List<Long> selectHomeUserIdByGroupId(LoginNameByGroupIdDto loginNameByGroupIdDto);

    List<PropertyManagementGroupVo> selectGroups(GroupByGroupNameDto groupByGroupNameDto);

	/**
	 * 查询机构列表
	 *
	 * @return
	 */
	List<RpcGroupVo> queryGroupList();
	/*
	 * 集团化查询下属养老院
	 * */
    List<GroupInforVo> getAllGroup(Long groupId);

	/**
	 * 查询该机构及子机构信息
	 *
	 * @param groupId   the group id
	 *
	 * @return  the rpc group vo list.
	 */
    List<GroupVo> queryGroupListByGroupId(Long groupId);

	/**
	 * 查询子机构信息
	 *
	 * @param groupId   the group id
	 *
	 * @return  the rpc group vo list
	 */
    List<GroupVo> queryChildListByGroupId(Long groupId);
	/**
	 * 查询机构类型
	 * @param groupId
	 * @return
	 */
    List<CountVo> selectType(Long groupId);
}
